在上一篇中,我們介紹了 Docker 中的 Network,並且提到了在微服務的概念中,可能需要同時啟動多個服務,這樣一來可能就會變得相當麻煩。不過,別擔心,Docker 也為我們提供了解決方案,那就是 Docker-Compose。
Docker-Compose 允許我們使用一個指令一次啟動多個 Container,並且可以讓它們之間輕鬆通信(就是上一篇講的 Network)。
首先,我們稍微修改之前的範例,假設我們現在需要一個 Flask 的後端和一個 Redis 的快取服務。
首先,我們需要編寫一個 docker-compose.yml 的檔案。
test-project
├── app.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt
app.py
import os
from flask import Flask
from flask_redis import FlaskRedis
app = Flask(__name__)
app.config['REDIS_URL'] = os.environ['REDIS_URL']
r = FlaskRedis(app)
@app.route('/')
def index():
    if not r.exists("count"):
        r.set("count", 0)
    r.incr("count")
    return r.get("count")
if __name__ == "__main__":
    app.run(host="0.0.0.0")
docker-compose.yml
version: '3.8'
services:
  backend:
    build: .
    container_name: backend_flask
    networks:
      - net
    ports:
      - 5000:5000
    environment:
      - REDIS_URL=redis://cache:6379/0
    volumes:
      - .:/project:ro
    command: "python3 app.py"
  cache:
    image: redis
    container_name: database_redis
    networks:
      - net
    ports:
      - 6379:6379
networks:
  net:
    name: frnet
    driver: bridge
當你寫好了 docker-compose.yml 之後,接著就可以使用以下指令一次啟動所有服務:
$ docker-compose up
這樣就能看到兩個服務一起執行了。
如果需要停止所有服務,也可以使用以下指令:
$ docker-compose down